#include <iostream>

class Animal
{
public:
    void speak() { std::cout << "动物怎么叫" << std::endl; }
};

class Cat : virtual public Animal // 虚继承
{
};

class Dog : virtual public Animal // 虚继承
{
};

class Sheep : public Cat, public Dog // 菱形继承
{
    // Sheep对象中有两个Animal子对象
    // sheep.speak(); // 编译错误，无法确定调用哪个Animal的speak
};

// 解决菱形继承问题

int main()
{
    Sheep sheep;   // 菱形继承
    sheep.speak(); // 正确调用Animal的speak

    return 0;
}